/**
 * Copyright (C) 2011 Taobao Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.taobao.jaket;

import junit.framework.Assert;

import org.junit.Test;

import com.google.gson.Gson;
import com.taobao.jaket.model.Person;
import com.taobao.jaket.model.PersonWithAddr;

/**
 * @author Xueqiang Mi
 */
public class JsonRendererTest_Object {

    @Test
    public void testSimpleObject() {
        // do custom rendering
        JsonRenderer renderer = new JsonRenderer();
        renderer.name("id").value(34780);
        renderer.name("name").value("yijiang");
        renderer.name("age").value(25);
        renderer.name("ref").value("test");
        String json = renderer.build();
        System.out.println(json);

        Person p = new Gson().fromJson(json, Person.class);
        Assert.assertNotNull(p);
        Assert.assertEquals(34780, p.getId());
        Assert.assertEquals("yijiang", p.getName());
        Assert.assertEquals(25, p.getAge());
    }

    @Test
    public void testComplexObject() {
        JsonRenderer renderer = new JsonRenderer();
        renderer.name("id").value(34780);
        renderer.name("name").value("yijiang");
        renderer.name("age").value(25);
        renderer.name("address").name("zipCode").value(310099);
        renderer.name("address").name("address").value("No.99, Huaxing Rd.");
        renderer.name("address").name("city").value("Hangzhou");
        renderer.name("address").name("province").value("Zhejiang");
        renderer.name("address").name("country").value("CN");
        String json = renderer.build();
        System.out.println(json);

        PersonWithAddr p = new Gson().fromJson(json, PersonWithAddr.class);
        Assert.assertNotNull(p);
        Assert.assertEquals(34780, p.getId());
        Assert.assertEquals("yijiang", p.getName());
        Assert.assertEquals(25, p.getAge());
        Assert.assertEquals(310099, p.getAddress().getZipCode());
        Assert.assertEquals("No.99, Huaxing Rd.", p.getAddress().getAddress());
        Assert.assertEquals("Hangzhou", p.getAddress().getCity());
        Assert.assertEquals("Zhejiang", p.getAddress().getProvince());
        Assert.assertEquals("CN", p.getAddress().getCountry());
    }
}
